<?php
class Search_Model_Kodawari extends Search_Model_Common {

	/**
	* こだわりID⇒検索パラメータ　変換
	*
	* @access	public
	* @param	array  パラメータ
	* @return
	*/
	public function convertKodawariIdToParams(&$params)
	{

		// パラメータを検索
		$kodawari_params = array();
		$k = 0;
		// KodawariIdが存在する場合
		if (!empty($params['KodawariId'])) {
			$val = $params['KodawariId'];
			// valが配列でないか（普通ないけど）
			$val_arr = array();
			if (is_array($val)) {
				$val_arr = $val;
			}
			else {
				$val_arr[0] = $val;
			}
			// IDからパラメータを取得
			for ($v=0; $v<count($val_arr); $v++) {
				$cnt = Apm_Config_Search::$KODAWARI_ID_PRM_LIST[$val]["cnt"];
				$kodawari_list = Apm_Config_Search::$KODAWARI_ID_PRM_LIST[$val]["prm"];
				for ($i=0; $i<$cnt; $i++) {
					// パラメータを追加
					$kodawari_params[$k] = $kodawari_list[$i];
					$k++;
				}
			}
		}

		// こだわりパラメータを検索パラメータへ追加
		for ($i=0; $i<count($kodawari_params); $i++) {
			$key = $kodawari_params[$i]["param"];
			$val = $kodawari_params[$i]["value"];
			if ($params[$key] == null) {
				$params[$key] = $val;
			}
		}

	}

	/**
	* こだわりIDからこだわり条件名取得
	*/
	public function getKodawariNameByKodawariCd($params)
    {
    	$db_params = array();
        $sql = $this->generateKodawariNameByKodawariCdSql($params, $db_params);
        return $this->dbGetList($sql, $db_params);
    }

	/**
	* 検索パラメータからこだわりID取得
	*
	* @access	public
	* @param	array  パラメータ
	* @return	string こだわりID
	*/
	public function convertParamsToKodawariId($params)
	{
		$id = "";
		// こだわりリストを取得
		$kodawari_list = Apm_Config_Search::$KODAWARI_ID_PRM_LIST;
		foreach ($kodawari_list as $kodawari_id => $kodawari_arr) {
			// パラメータ配列を取り出し
			$kodawari_prm = $kodawari_arr["prm"];
			// 指定パラメータが存在するかチェック
			$check = true;
			for ($k=0; $k<count($kodawari_prm); $k++) {
				$key = $kodawari_prm[$k]["param"];
				$val = $kodawari_prm[$k]["value"];
				// パラメータが存在するか
				if ($params[$key] == null || empty($params[$key])) {
					$check = false;
					break;
				}
				else {
					// パラメータの値が等しいか
					if ($params[$key] != $val) {
						$check = false;
						break;
					}
				}
			}
			// 全てのパラメータが存在する場合
			if ($check) {
				$id = $kodawari_id;
				break;
			}
		}
		return $id;
	}

	/**
	 * こだわりIDから画面データを取得
	 *
	 * @access	public
	 * @param	string こだわりID
	 * @return	array  画面データ
	 */
	public function convertKodawariPrefData($kodawari_id)
	{
		$kodawari = array();
		$kodawari['KODAWARI_ID'] = $kodawari_id;
		// 文言
		$kodawari['KODAWARI_STR'] = Apm_Config_Search::$KODAWARI_ID_STR_LIST[$kodawari_id];
		$kodawari['KODAWARI_IMG'] = "";
		// 画像が存在するか
		$file = "images/kodawari/kodawari_ttl_" . str_pad($kodawari_id, 2, '0', STR_PAD_LEFT) . ".jpg";
		$kodawari['KODAWARI_IMG'] = $file;

		// 支援住宅の場合
		if($kodawari_id == '38' || $kodawari_id == '39')
		{
			// 都道府県別支援住宅数取得
			$kodawari['TODOFUKEN_CNT'] = $this->setSienJyukakucount($kodawari_id);
			// カラー設定
			$kodawari['KODAWARI_TITLE_COLOR'] = '#E66034';
			$kodawari['KODAWARI_TITLE_BACK']  = '#FFFFFF';
			$kodawari['BORDER_COLOR']         = '#FE9E3F';
			// 画像名の頭
			$kodawari['SIEN_GAZO']            = 'sien_';
		}
		else
		{
			// カラー設定
			$kodawari['KODAWARI_TITLE_COLOR'] = '#09a4d7';
			$kodawari['KODAWARI_TITLE_BACK']  = '#ddf4fa';
			$kodawari['BORDER_COLOR']         = '#4285F5';
		}
//		$filePath = getcwd() . $file;
//		if (file_exists($filePath)) {
//			$kodawari['KODAWARI_IMG'] = $file;
//		}
		return $kodawari;
	}

	/**
	 * 都道府県別支援住宅数配列作成
	 *
	 * @access	public
	 * @return	array
	 */
	public function setSienJyukakucount($kodawari_id)
	{
		$result = array();

		$data = $this->getSienJyukakucount($kodawari_id);
		foreach ($data as $value)
		{
			$todoufukenCd = $value['A04_TODOUFUKEN_CD'];
			$result["$todoufukenCd"] = $value['A04_BUKKEN_CNT'];
		}

		return $result;
	}

	/**
	 * 都道府県別支援住宅数取得
	 *
	 * @access	public
	 * @return	array
	 */
	public function getSienJyukakucount($kodawari_id)
	{
	    $db_params = array();

		$sql  = "";
		$sql .= " select";
		$sql .= "     A04_TODOUFUKEN_CD,";
		$sql .= "     sum(A04_BUKKEN_CNT) as A04_BUKKEN_CNT";
		$sql .= " from";
		$sql .= "     A04KODAWARI_BUKKEN_COUNT";
		$sql .= " where";
		$sql .= "     A04_KODAWARI_CD = :kodawariId";
		$sql .= " group by";
		$sql .= "    A04_TODOUFUKEN_CD";
		$db_params['kodawariId'] = $kodawari_id;

        return $this->dbGetList($sql, $db_params);
	}

	/**
	* パラメータからこだわりID取得
	*
	* @access	public
	* @param	array  パラメータ
	* @return	string こだわりID
	*/
	public function getKodawariId($params)
	{
		// こだわりIDを取得
		$kodawari_id = $this->convertParamsToKodawariId($params);
		// こだわりIDのパラメータを取得
		$kodawari_prm = Apm_Config_Search::$KODAWARI_ID_PRM_LIST[$kodawari_id]["prm"];
		// 検索条件パラメータを取得
		$joken_prm = $this->getJokenParams($params);

		// 数が一致した場合、こだわりIDを返却
		if (count($kodawari_prm) == count($joken_prm)) {
			return $kodawari_id;
		}
		else {
			return "";
		}
	}

	/**
	 * 動的URLを生成する（こだわりCat1×エリアCat2）
	 *
	 * @access	public
	 * @param	array  パラメータ
	 * @return	array  URL
	 */
	public function generatePrefDynamicUrl($params)
	{

		$arrUrl = array();
		$config = Zend_Registry::get('config')->toArray();
		$static = "search/kodawarisearch";

		// パラメータにSrhKbnが存在しない場合は付加
		$srhkbn = "";
		if (empty($params['SrhKbn'])) {
			$strkbn = "SrhKbn=" . Apm_Config_Search::SRHKBN_KODAWARI . "&";
		}

		// パラメータをURL化
		$params_url = $this->generateUrlParameter($params, array('PrefCd'));

		// 都道府県データ取得
		$prefList = Apm_Config_Search::$TODOUFUKEN_NAME_CODE_LIST;

		// URL生成
		foreach ($prefList as $key => $val) {
			$url = $static . "?" . $strkbn . $params_url . "&PrefCd[]=" . $key;
			$arrUrl[$key] = $url;	// 追加
		}

		return $arrUrl;
	}

	/**
	 * パラメータをURL形式へ変換
	 *
	 * @access	public
	 * @param	array  パラメータ
	 * @param	array  生成しないパラメータ名
	 * @return	array  URL
	 */
	public function generateUrlParameter($params, $ng_params=array())
	{
		$str = "";

		foreach ($params as $key => $val) {
			// NGパラメータは処理を飛ばす
			$check_word = ereg_replace("\[[0-9]*\]", "", $key);		// 配列[]を削除
			if (array_key_exists($check_word, $ng_params)) {
				continue;
			}
			// パラメータが配列の場合
			if (is_array($val)) {
				foreach ($val as $val_key => $val_val) {
					// URL文字列へ変換
					$str .= "&" . $key . "[]=" . urlencode(mb_convert_encoding($val_val, 'UTF-8', 'SJIS'));
				}
			}
			else {
				// URL文字列へ変換
				$str .= "&" . $key . "=" . urlencode(mb_convert_encoding($val, 'UTF-8', 'SJIS'));
			}
		}
		// 先頭1文字を削除
		if ($str != "") {
			$str = substr($str, 1);
		}
		return $str;
	}

	/**
	* パラメータから検索条件項目取得
	*
	* @access	public
	* @param	array パラメータ
	* @return	array 対象項目データ
	*/
	public function getJokenParams($params)
	{
		$joken = array();
		$j = 0;

		// パラメータを検索
		foreach($params as $key => $val) {
			$id = "";
			$key = strtolower($key);
			if (is_array($val)) {
				$val_arr = $val;
			}
			else {
				$val_arr[0] = $val;
			}
			foreach ($val_arr as $idx => $val) {
				$val = strtolower($val);
				$prm = $this->checkSearchJoken($key, $val, $id);
				if ($prm != "") {
					// 検索条件と一致
					$joken[$j] = array($key, $val, $prm, $id);
					$j++;
				}
			}
		}

		return $joken;
	}

	// パラメータ名を検索条件か判断
	public function checkSearchJoken($key, $val, &$id)
	{
		// 値を持つもの
		$size_joken = array("tinryo1", "tinryo2", "ekitoho",  "senyu1", "senyu2", "built", "jyohou", "prcomment"
							);

		// フラグ指定のもの
		$flag_joken  = array("freerent", "shikireizero", "heyawari", "shikikin_nashi", "reikin_nashi"
							,"tinryo_jouken2", "tyusyajyo_komi", "meyasu_tinryo", "shataku_koujyo",  "bas_riyou"
							);

		for($i=0; $i<count($size_joken); $i++) {
			if ($key == $size_joken[$i]) {
				return $size_joken[$i];
			}
		}

		for($i=0; $i<count($flag_joken); $i++) {
			if ($key == $flag_joken[$i]) {
				if ($val == "on") {
					return $flag_joken[$i];
				} else {
					return "";
				}
			}
		}

		// 建物種別（静的URL化されているため、除外）
		// syubetu
/*		if (substr($key, 0, 7) == "syubetu") {
			if ($val == "on") {
				$id = substr($key, 7);
				return "syubetu";
			} else {
				return "";
			}
		}
*/
		// 間取り
		// madori
		if (substr($key, 0, 6) == "madori") {
			if ($val == "on") {
				$id = substr($key, 6);
				return "madori";
			} else {
				return "";
			}
		}

		// こだわり
		// kodawari
		if (substr($key, 0, 8) == "kodawari") {
			if ($val == "on") {
				$id = substr($key, 8);
				return "kodawari";
			} else {
				return "";
			}
		}

		// キャンペーン
		// campaign（配列）
		if (substr($key, 0, 8) == "campaign") {
			$id = $val;
			return "campaign";
		}

		return "";
	}

    /**
     * 政令指定都市・市区コード取得用SQL文の取得
     *
     * 政令指定都市・市区コード取得SQL文の取得を行う
     * @access	public
     * @param	array
     * @param	array
     * @return	string 政令指定都市名取得SQL
     */
    public function generateKodawariNameByKodawariCdSql($params, &$db_params)
    {

        $db_params['kodawariId'] = $params['KodawariId'];

		$sql = "";
		$sql .= "SELECT ";
		$sql .= "    distinct W74_KODAWARI_ID ";
		$sql .= "           , W74_KODAWARI_NAME ";
		$sql .= "FROM ";
		$sql .= "    W74KODAWARI ";
		$sql .= "WHERE ";
		$sql .= "    W74_KODAWARI_ID = :kodawariId ";

        return $sql;
    }

}
?>